/**
 * API 通用类型定义
 */

// 通用响应结构
export interface CommonResult<T = any> {
  code: number
  data: T
  msg: string
}

// 分页请求参数
export interface PageRequest {
  pageNo: number
  pageSize: number
}

// 分页响应结构
export interface PageResult<T> {
  list: T[]
  total: string // Long 类型返回字符串
}

// 基础请求参数
export interface BaseRequest {
  id: string // Long 类型传字符串
}

/**
 * 用户相关类型
 */
export interface UserVO {
  id: string // Long 类型返回字符串
  username: string
  nickname: string
  email?: string
  sex?: number // 0-女 1-男
  avatar?: string
  role: number // 0-管理员 1-普通用户
  status: number // 0-停用 1-正常
  remark?: string
  createTime: string
  updateTime: string
}

export interface UserLoginRequest {
  username: string
  password: string
}

export interface UserAddRequest {
  username: string
  password: string
  nickname: string
  email?: string
  sex?: number
  avatar?: string
  role: number
  status?: number
  remark?: string
}

export interface UserUpdateRequest {
  id: string // Long 类型传字符串
  nickname?: string
  email?: string
  sex?: number
  avatar?: string
  role?: number
  status?: number
  remark?: string
}

export interface UserQueryRequest extends PageRequest {
  id?: string // Long 类型传字符串
  username?: string
  nickname?: string
  email?: string
  sex?: number
  role?: number
  status?: number
}

/**
 * 代码片段相关类型
 */
export interface CodeVO {
  id: string // Long 类型返回字符串
  title: string
  content: string
  viewCount: number
  tags?: string // JSON 字符串
  creator?: string // Long 类型返回字符串
  creatorNickname?: string // 创建人昵称
  createTime: string
  updateTime?: string // 更新时间（可能为空）
}

export interface CodeAddRequest {
  title: string
  content: string
  tags?: string
}

export interface CodeUpdateRequest {
  id: string // Long 类型传字符串
  title?: string
  content?: string
  tags?: string
}

export interface CodeQueryRequest extends PageRequest {
  id?: string // Long 类型传字符串
  title?: string
  tags?: string
  creator?: string // Long 类型传字符串
}

/**
 * 标签相关类型
 */
export interface TagVO {
  id: string // Long 类型返回字符串
  parentId?: string // Long 类型返回字符串
  name: string
  creator?: string // Long 类型返回字符串
  createTime: string
  updateTime: string
}

export interface TagAddRequest {
  parentId?: string // Long 类型传字符串
  name: string
}

export interface TagUpdateRequest {
  id: string // Long 类型传字符串
  parentId?: string // Long 类型传字符串
  name?: string
}

export interface TagQueryRequest extends PageRequest {
  id?: string // Long 类型传字符串
  parentId?: string // Long 类型传字符串
  name?: string
}

